package com.ebupt.migu.music.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ebupt.migu.music.entity.UserGroupInfo;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

/**
 * @author tz
 */
@Mapper
@DS("mysql_mg")
public interface UserGroupInfoMapper extends BaseMapper<UserGroupInfo> {

    /**
     * 查询需要同步tsg的人群信息
     * 
     * @param start
     * @param end
     * @return
     */
    default List<UserGroupInfo> syncTsgUserGroup(Date start, Date end) {
        return this.selectList(new QueryWrapper<UserGroupInfo>().lambda().eq(UserGroupInfo::getCreateStatus, 5)
            .between(UserGroupInfo::getCreateTime, start, end));
    }

    /**
     * 查询标签平台客群
     * 
     * @return
     */
    default List<UserGroupInfo> qryCustomer() {
        return this.selectList(new QueryWrapper<UserGroupInfo>().lambda().eq(UserGroupInfo::getCreateStatus, 4)
            .eq(UserGroupInfo::getIsStaticCustomer, 1).eq(UserGroupInfo::getDataWrittenToRedis, 1));
    }

    /**
     * 更新真实用户
     * 
     * @param groupId
     * @return
     */
    default void updateClientUser(String groupId, int clientUser, int mobileUser) {
        this.update(new UpdateWrapper<UserGroupInfo>().lambda().eq(UserGroupInfo::getGroupId, groupId)
            .set(UserGroupInfo::getCreateStatus, 5)
            .set(UserGroupInfo::getClientUser, clientUser)
            .set(UserGroupInfo::getMobileUser, mobileUser)
            .set(UserGroupInfo::getDataWrittenToRedis, 0));
    }

    /**
     * 更新数据录入Redis的状态 0-无需写入或已完成；1-等待写入；2-写入中；
     *
     * @param groupId
     * @return
     */
    default void updateUserGroupDataWrittenToRedis(String groupId, int dataWrittenToRedis) {
        this.update(new UpdateWrapper<UserGroupInfo>().lambda().eq(UserGroupInfo::getGroupId, groupId)
            .set(UserGroupInfo::getDataWrittenToRedis, dataWrittenToRedis));
    }
}
